<?php
/*
  $Id$

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2007 osCommerce

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License v2 (1991)
  as published by the Free Software Foundation.
*/
	require('includes/classes/invoice.php');	
	$osC_Invoice = new osC_Invoice($_GET['oID']);
//	echo "<pre>". print_r($osC_Invoice, true) ."</pre>";
//	die('xxx');
?>

<table border="0" width="100%" cellspacing="0" cellpadding="2">
  <tr>
    <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td class="pageHeading"><?php echo nl2br(STORE_NAME_ADDRESS); ?></td>
        <td class="pageHeading" align="right">&nbsp;</td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><table width="100%" border="0" cellspacing="0" cellpadding="2">
      <tr>
        <td colspan="2">&nbsp;</td>
      </tr>
      <tr>
        <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2">
          <tr>
            <td><b> Dirección de la Facturación </b></td>
          </tr>
          <tr>
            <td><?php echo osC_Address::format($osC_Invoice->getBilling(), '<br />'); ?></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td><?php echo $osC_Invoice->getCustomer('telephone'); ?></td>
          </tr>
          <tr>
            <td><?php echo '<a href="mailto:' . $osC_Invoice->getCustomer('email_address') . '"><u>' . $osC_Invoice->getCustomer('email_address') . '</u></a>'; ?></td>
          </tr>
        </table></td>
        <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2">
          <tr>
            <td><b>Dirección del Envío</b></td>
          </tr>
          <tr>
            <td><?php echo osC_Address::format($osC_Invoice->getDelivery(), '<br />'); ?></td>
          </tr>
        </table></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><table border="0" cellspacing="0" cellpadding="2">
      <tr>
        <td><b>Forma de Pago</b></td>
        <td><?php echo $osC_Invoice->getPaymentMethod(); ?></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><table border="0" width="100%" cellspacing="0" cellpadding="2" class="dataTable">
      <thead>
        <tr>
          <th colspan="2">Productos</th>
          <th>Modelo</th>
          <th>Impuesto</th>
          <th>Precio (Neto)</th>
          <th>Precio (Bruto)</th>
          <th>Total (Neto)</th>
          <th>Total (Bruto)</th>
        </tr>
      </thead>
      <tbody>
<?php
    foreach ($osC_Invoice->getProducts() as $product) {
      echo '        <tr>' . "\n" .
           '          <td valign="top" align="right">' . $product['quantity'] . '&nbsp;x</td>' . "\n" .
           '          <td valign="top">' . $product['name'];

      if (isset($product['attributes']) && (sizeof($product['attributes']) > 0)) {
        foreach ($product['attributes'] as $attribute) {
          echo '<br /><nobr>&nbsp;&nbsp;&nbsp;' . $attribute['option'] . ': ' . $attribute['value'] . '</nobr>';
        }
      }

      echo '          </td>' . "\n" .
           '          <td valign="top">' . $product['model'] . '</td>' . "\n";
      echo '          <td align="right" valign="top">' . $osC_Tax->displayTaxRateValue($product['tax']) . '</td>' . "\n" .
           '          <td align="right" valign="top"><b>' . $osC_Currencies->format($product['price'], true, $osC_Invoice->getCurrency(), $osC_Invoice->getCurrencyValue()) . '</b></td>' . "\n" .
           '          <td align="right" valign="top"><b>' . $osC_Currencies->displayPriceWithTaxRate($product['price'], $product['tax'], 1, true, $osC_Invoice->getCurrency(), $osC_Invoice->getCurrencyValue()) . '</b></td>' . "\n" .
           '          <td align="right" valign="top"><b>' . $osC_Currencies->format($product['price'] * $product['quantity'], true, $osC_Invoice->getCurrency(), $osC_Invoice->getCurrencyValue()) . '</b></td>' . "\n" .
           '          <td align="right" valign="top"><b>' . $osC_Currencies->displayPriceWithTaxRate($product['price'], $product['tax'], $product['quantity'], true, $osC_Invoice->getCurrency(), $osC_Invoice->getCurrencyValue()) . '</b></td>' . "\n";
      echo '        </tr>' . "\n";
    }
?>
      </tbody>
    </table>

    <table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
		$monto = null;
	  foreach ($osC_Invoice->getTotals() as $total) {
		echo '      <tr>' . "\n" .
			 '        <td align="right">' . $total['title'] . '</td>' . "\n" .
			 '        <td align="right">' . $total['text'] . '</td>' . "\n" .
			 '      </tr>' . "\n";
		if ($total['title'] == 'Total:') {
			$monto = $total['value'];
		}
	  }
?>
    </table></td>
  </tr>
</table>

<?php	
	if (!in_array($osC_Invoice->getStatusID(), array(1, 2))) {
		$fecha_primer_vencimiento = mktime (0, 0, 0, date('m'), date('d'), date('Y'));
		$fecha_primer_vencimiento = date('Y-m-d', $fecha_primer_vencimiento);
		$fecha_segundo_vencimiento = (mktime(0, 0, 0, date('m'), date('d'), date('Y')) + (86400*15));
		$fecha_segundo_vencimiento = date('Y-m-d', $fecha_segundo_vencimiento);

		$customer = $osC_Invoice->getCustomer();
		$cli_codigo = $customer['id'];

		$result = generar_codigo_barra_pago_facil('0771', $monto, $fecha_primer_vencimiento, $fecha_segundo_vencimiento, $cli_codigo, $cmp_codigo="");

		echo sprintf("<div align='center'>	<img src='%s/templates/default/content/account/codigo.php?itemId=%s' /> </div>", HTTP_SERVER, $result);
	}



	function generar_codigo_barra_pago_facil($numero_pago_facil, $monto, $fecha_primer_vencimiento, $fecha_segundo_vencimiento, $cli_codigo, $cmp_codigo="")  {
		
		$v_fecha_primer_vencimiento = explode("-",$fecha_primer_vencimiento);
		$v_fecha_segundo_vencimiento = explode("-",$fecha_segundo_vencimiento);
		$ano_primer_vencimiento = substr($v_fecha_primer_vencimiento[0],2,2);
		$ano_segundo_vencimiento = substr($v_fecha_segundo_vencimiento[0],2,2);

		/* Calculo de la fecha del primer vencimiento */
		$fecha_inicio = mktime(0, 0, 0, 1, 1, $v_fecha_primer_vencimiento[0]);
		$fecha_facturacion = mktime(0, 0, 0, $v_fecha_primer_vencimiento[1], $v_fecha_primer_vencimiento[2], $v_fecha_primer_vencimiento[0]);
		$diff = diferencia_entre_fechas($fecha_facturacion, $fecha_inicio);
		$dias_de_diferencia=false;
		$dias_de_diferencia = $diff[0] + 1;
		$dias_de_diferencia = "000" . $dias_de_diferencia;
		$dias_de_diferencia_primer_vencimiento = substr($dias_de_diferencia, strlen($dias_de_diferencia)-3, 3);

		/* Calculo de la fecha del segundo vencimiento */
		$fecha_inicio = mktime(0, 0, 0, 1, 1, $v_fecha_segundo_vencimiento[0]);
		$fecha_facturacion = mktime(0, 0, 0, $v_fecha_segundo_vencimiento[1], $v_fecha_segundo_vencimiento[2], $v_fecha_primer_vencimiento[0]);
		$diff = diferencia_entre_fechas ($fecha_facturacion, $fecha_inicio);
		$dias_de_diferencia=false;
		$dias_de_diferencia = $diff[0] + 1;
		$dias_de_diferencia = "000" . $dias_de_diferencia;
		$dias_de_diferencia_segundo_vencimiento = substr($dias_de_diferencia, strlen($dias_de_diferencia)-3, 3);

		/* Cliente 14 digitos */
		$cliente = substr(str_pad($cli_codigo, 14, "0", STR_PAD_LEFT), 0, 14);
		$monto = number_format($monto, 2, '.', ',');
		$monto = str_replace(",","",$monto);
		$monto = str_replace(".","",$monto);
		$monto = "000000000" . $monto;
		$monto_aux1 = substr($monto, strlen($monto)-8, 8);
		$monto_aux2 = substr($monto, strlen($monto)-9, 9);

		$codigoBarra = array();
		$codigoBarra['empresa'] = str_pad(substr($numero_pago_facil, 0, 4), 4, 0, STR_PAD_LEFT);
		$codigoBarra['importe_primer_vencimiento'] = str_pad(substr($monto_aux1, 0, 8), 8, 0, STR_PAD_LEFT);
		$codigoBarra['primer_vencimiento'] = str_pad(substr(sprintf('%s%s', $ano_primer_vencimiento, $dias_de_diferencia_primer_vencimiento) , 0, 5), 5, 0, STR_PAD_LEFT);
		$codigoBarra['cliente'] = str_pad(substr($cliente, 0, 14), 14, 0, STR_PAD_LEFT);
		$codigoBarra['moneda'] = 0;
		$codigoBarra['recargo_segundo_vencimiento'] = str_pad(substr(($monto_aux2 - $monto_aux1), 0, 6), 6, 0, STR_PAD_LEFT);
		$codigoBarra['segundo_vencimiento'] = str_pad(substr($dias_de_diferencia_segundo_vencimiento, 0, 2), 2, 0, STR_PAD_LEFT);

		/*  CALCULO DE DIGITO VERIFICADOR */
		$codigoBarra['primer_digito_verigicador'] = digitoVerificador(implode('', $codigoBarra));
		$codigoBarra['segundo_digito_verigicador'] = digitoVerificador(implode('', $codigoBarra));
		return implode('', $codigoBarra);
	}
	/**
	 * @desc	Genera el digito verificador para una cadena.
	 * @auth	mvega
	 * @date	31/08/2009
	 */
	function digitoVerificador($string) {
		/* A CADA CARACTER DEL STRING, ASIGNARLE UN DIGITO D LA SECUENCIA */
		$code = null;
		$verification = null;
		$sequence = 1;

		for ($i = 0; $i < strlen($string); $i++) {
			if ($i != 0) {
				$sequence = $sequence + 2;
			}

			if ($sequence === 11) {
				$sequence = 3;
			}
			/* MULTIPLICAR CADA DIGITO DEL STRING POR EL CORRESPONCDIENTE EN LA SECUENCIA */
			$verification[] = ($string[$i] * $sequence);
		}

		/* SUMAR LOS PRODUCTOS */
		$digit = array_sum($verification);
		/* DIVIDIR EL RESULTADO DE LA SUMA POR DOS */
		$digit = (int)($digit/2);
		/* TOMAR PARTE ENTERA DE LA SUMA Y DIVIDIRLA POR 10 (MODULO 10) */
		$digit = $digit % 10;
	
		return $digit;
	}

	//La funcion calcula la diferencia entre dos fechas en fomato unix timestamp
	//Retorna un array con los dias, horas, minutos y segundos
	function diferencia_entre_fechas($time1, $time2)
	{
		if (!is_numeric($time1))
		{
			if (strstr($time1,"/"))
				$time1=formatear_fecha($time1);
			if (strstr($time1,"-"))
			{
				$temp=explode("-",$time1);
				$time1=mktime(0,0,0,$temp[1],$temp[2],$temp[0]);
			}
		}
		if (!is_numeric($time2))
		{
			if (strstr($time2,"/"))
				$time1=formatear_fecha($time2);
			if (strstr($time2,"-"))
			{
				$temp=explode("-",$time2);
				$time2=mktime(0,0,0,$temp[1],$temp[2],$temp[0]);
			}
		}

		//calculo en segundos
		$diff = abs($time1-$time2);
		$daysDiff = floor($diff/60/60/24);
		$diff -= $daysDiff*60*60*24;
		$hrsDiff = floor($diff/60/60);
		$diff -= $hrsDiff*60*60;
		$minsDiff = floor($diff/60);
		$diff -= $minsDiff*60;
		$secsDiff = $diff;

		$diferencia=false;
		$diferencia[0]=$daysDiff;
		$diferencia[1]=$hrsDiff;
		$diferencia[2]=$minsDiff;
		$diferencia[3]=$secsDiff;

		return $diferencia;
	}
	
?>
